package com.ftwj.demo.global.shiro;

import java.util.List;
import java.util.UUID;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.ByteSource;

/**
 * 
 * @ClassName: ShiroUtil
 * @Description: Shiro工具类
 * @author: WangShengLi
 * @date: 2019年7月22日 下午7:44:50
 */
public class ShiroUtil {

	/**
	 * 
	 * @Title: getPrincipal
	 * @Description: 获取自定义认证实体
	 * @author: WangShengLi
	 * @return
	 * @return: ShiroPrincipal
	 */
	public static ShiroPrincipal getPrincipal() {
		Subject subject=SecurityUtils.getSubject();
		ShiroPrincipal principal=(ShiroPrincipal) subject.getPrincipal();
		return principal;
	}
	
	/**
	 * 
	 * @Title: HasRole
	 * @Description: 判断用户是否拥有该角色
	 * @author: WangShengLi
	 * @param roleName
	 * @return
	 * @return: Boolean
	 */
	public static Boolean HasRole(String roleName) {
		Subject subject=SecurityUtils.getSubject();
		return subject.hasRole(roleName);
	}
	
	
	/**
	 * 
	 * <p>Title: getUserId</p>  
	 * <p>Description: 获取当前登录用户ID,不存在则返回NULL</p>  
	 * @return 
	 * @author WangsLi
	 * @date 2020年3月9日  
	 * @version 1.0
	 */
	public static Integer getUserId() {
		return getPrincipal()!=null?getPrincipal().getUserId():null;
	}
	
	/**
	 *
	 * @Title: getUserBean
	 * @Description: 获取当前登录用户显示名,不存在则返回NULL
	 * @author: WangShengLi
	 * @return
	 * @return: UserBean
	 */
	public static String getShowName() {
		return getPrincipal()!=null?getPrincipal().getShowName():null;
	}
	
	/**
	 *
	 * @Title: getUserBean
	 * @Description: 获取当前登录用户登录名,不存在则返回NULL
	 * @author: WangShengLi
	 * @return
	 * @return: UserBean
	 */
	public static String getLoginName() {
		return getPrincipal()!=null?getPrincipal().getLoginName():null;
	}

	/**
	 * 
	 * <p>Title: getUserId</p>  
	 * <p>Description: 获取当前登录用户电话,不存在则返回NULL</p>  
	 * @return 
	 * @author WangsLi
	 * @date 2020年3月9日  
	 * @version 1.0
	 */
	public static String getPhone() {
		return getPrincipal()!=null?getPrincipal().getPhone():null;
	}
	
	/**
	 *
	 * @Title: getUserBean
	 * @Description: 获取当前登录用户头像,不存在则返回NULL
	 * @author: WangShengLi
	 * @return
	 * @return: UserBean
	 */
	public static String getAvatar() {
		return getPrincipal()!=null?getPrincipal().getAvatar():null;
	}
	
	/**
	 * 
	 * @Title: getRoles
	 * @Description: 获取当前等用户所用户的角色
	 * @author: WangShengLi
	 * @return
	 * @return: List<RoleBean>
	 */
	public static List<String> getRoles() {
		return getPrincipal().getRoles();
	}
	
	/**
	 * 
	 * @Title: getPermissions
	 * @Description: 获取当前用户所拥有的权限
	 * @author: WangShengLi
	 * @return
	 * @return: List<PermissionBean>
	 */
	public static List<String> getPermissions() {
		return getPrincipal().getPermissions();
	}
	
	/**
	 * 
	 * <p>Title: getSalt</p>  
	 * <p>Description: 生成用户盐</p>  
	 * @return 
	 * @author WangSLi
	 * @date 2020年3月12日  
	 * @version 1.0
	 */
	public static String getSalt() {
		 return UUID.randomUUID().toString().replace("-", "");
	}
	
	/**
	 * 
	 * <p>Title: getMD5Password</p>  
	 * <p>Description: 用户密码加密</p>  
	 * @param salt
	 * @param passowrd
	 * @return 
	 * @author WangSLi
	 * @date 2020年3月12日  
	 * @version 1.0
	 */
	public static String getMD5Password(String salt,String passowrd) {
        ByteSource credentialsSalt=ByteSource.Util.bytes(salt);
        String algorithmName=Md5Hash.ALGORITHM_NAME;
        SimpleHash md5Passowrd = new SimpleHash(algorithmName, passowrd, credentialsSalt, 64);
        return md5Passowrd.toString();
	}
	
}
